package org.easyexcel.Server;

import org.easyexcel.Pojo.MyEntity;
import org.easyexcel.Utools.JDBCDruidUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author DPF
 */
public class DataImport {
    public Map<String, Object> import2DBFromExcel10w(List<MyEntity> cachedDataList) {
        HashMap<String, Object> result = new HashMap<>();

        // 如果结果集中数据为0，结束方法，返回表示空的结果
        if (cachedDataList.size() == 0) {
            result.put("empty", "0000");
            return result;
        }

        // JDBC分批插入+事务操作完成对10万数据的插入
        Connection conn = null;
        PreparedStatement ps = null;
        try {
            long startTime = System.currentTimeMillis();
            System.out.println(cachedDataList.size() + "条,开始导入到数据库时间:" + startTime + "ms");

            // 获取数据库连接
            conn = JDBCDruidUtils.getConnection();

            // 控制事务，默认不提交
            conn.setAutoCommit(false);

            // 准备 SQL 插入语句
            String sql = "INSERT INTO user (name, age, email) VALUES (?,?,?)";
            ps = conn.prepareStatement(sql);

            // 循环遍历数据列表，设置每个参数并添加到批处理中
            for (MyEntity item : cachedDataList) {
                ps.setString(1, item.getName());
                ps.setInt(2, item.getAge());
                ps.setString(3, item.getEmail());
                ps.addBatch();
            }

            // 执行批处理
            ps.executeBatch();

            // 手动提交事务
            conn.commit();

            long endTime = System.currentTimeMillis();
            System.out.println(cachedDataList.size() + "条,结束导入到数据库时间:" + endTime + "ms");
            System.out.println(cachedDataList.size() + "条,导入用时:" + (endTime - startTime) + "ms");

            // 返回成功结果
            result.put("success", "1111");
        } catch (Exception e) {
            // 捕获异常，记录错误信息
            result.put("exception", "0000");
            e.printStackTrace();
        } finally {
            // 关闭数据库连接和 PreparedStatement
            JDBCDruidUtils.close(conn, ps);
        }
        return result;
    }
}
